#ifndef U_NGRANDE_H
#define U_NGRANDE_H

#include <string>

#include "../../TipoDeDato.h"
#include "../../tipos_basicos.h"
#include "../../headermmparametro.h"

extern "C" void restarNGrande(int* a, int* b, int* c, int cantidad);

struct NodoUNGrande {
    int cantidad; // cantidad de ints!
    int* dato;
};

class UNGrande : implements TipoDeDato {

public:

    UNGrande(string& valor,int tamano);
    UNGrande(const char* cadena,int tamano);
    UNGrande(void* punteroADato);

    virtual void comparar(TipoDeDato& tipoDeDato,ostream& out);

    virtual void* damePunteroAMemoria();

    virtual ClaseDeDato getClass();

    virtual ~UNGrande();

    void mostrar(ostream& out); // sacar esto despues!

private:

    bool chequearCaracteres(string& valor,int tamano);
    void construirNGrande(string& valor,int tamano);
    int letraANumero(char letra);
    void mostrar(NodoUNGrande* nodo, ostream& out);
    bool esCero(NodoUNGrande* nodo);

    NodoUNGrande _valor;

};

#endif // U_NGRANDE_H
